第 1 章  ·  ChatGPT的本质

第1章 第1节 ChatGPT的本质


1.1 回到中学数学课:函数的本质

我想从一个你一定熟悉的概念说起:函数。还记得中学数学课上,老师在黑板上写下的那个公式吗?

y=f(x)y = f(x)

这是函数的标准形式。给定一个输入x,通过某种规则f进行计算,得到输出y。简单,明了,优雅。那时我们学的函数,大多数是这样的:

y=2x+3y = 2x + 3y=x2y = x^2y=sin⁡(x)y = \sin(x)

规则简单,输入输出的关系一目了然。但函数的力量,远不止于此。ChatGPT,从数学上讲,也是一个函数:

回答=ChatGPT(问题)\text{回答} = \text{ChatGPT}(\text{问题})

你输入一个问题(输入x),ChatGPT执行某种计算(函数f),然后返回一个回答(输出y)。

这不是比喻,不是类比,而是数学意义上的精确描述。ChatGPT就是一个函数——只不过,是一个极其复杂的函数。

1.2 1750亿个参数的"旋钮"

但ChatGPT和我们在中学学的函数,有一个本质的区别。中学的函数,参数通常只有几个:

y=2x+3y = 2x + 3

这里只有2个参数:系数"2"和常数"3"。而ChatGPT呢?它有1750亿个参数。 1750亿。这是一个什么概念?

我第一次看到这个数字的时候,也被震撼了。我们究竟在和一个什么样的"函数"打交道?

换个角度想,一个拥有1750亿参数的模型,它是怎么"理解"你的问题,又是怎么"组织"出回答的?

为了回答这个问题,我们可以把ChatGPT想象成一个巨大的控制面板。面板上密密麻麻排列着1750亿个旋钮,每个旋钮都可以调节,每个旋钮的位置都会影响最终的输出。

回答=f(问题,θ1,θ2,θ3,...,θ175000000000)\text{回答} = f(\text{问题}, \theta_1, \theta_2, \theta_3, ..., \theta_{175000000000})

这1750亿个旋钮(参数),共同决定了ChatGPT如何理解语义、如何组织逻辑、如何选择措辞。

Note

关于参数数量的说明

本书中我们主要以GPT-3的1750亿参数作为讲解示例。

为什么不用最新的GPT-5.2?

因为OpenAI从GPT-4开始就不再公开参数量等技术细节,而GPT-3是最后一个公开详细技术参数(96层网络、12288维嵌入等)的模型。GPT-3.5(与GPT3同源,是ChatGPT最初版本的基座)虽然也很重要,但它的参数量同样未公开,估计在1750亿左右。1750亿这个确切的数字,能让你更直观地理解这些概念。

不过请放心,所有GPT模型的核心原理是完全一致的——无论是1750亿参数还是现在万亿级别的参数,它们的工作机制都是相同的。而且以现在人类对Transformer架构的痴迷(后面你会了解Transformer,以及为什么我说是"痴迷"),短期内模型机制不会有太大的变化。

1.3 参数到底是什么?

说到这里,你可能会问:这些"参数"到底是什么?为什么要有这么多?

让我直接告诉你:参数是存储知识的容器

每个参数(准确说是参数的组合)编码了语言的某种规律:

每一种语言现象,每一点世界知识,都需要一些参数来存储和表达。

1.4 语言的复杂性

现在,关键问题来了:为什么需要这么多参数?

答案很简单,也很深刻:因为语言太复杂了。

语言复杂性的四个例子

让我给你举几个例子,感受一下语言的复杂性。

  1. 一词多义

"这本书很重"(重量大)
"这件事很重要"(重要)

同一个"重"字,在不同语境下,意思完全不同。人类当然能够理解,但是模型需要参数来捕捉这种微妙的差异。

  1. 指代消解

所谓指代消解,就是判断代词(如"他"、"它"、"这个"等)具体指代什么。这在人类看来很自然,但对计算机是一个复杂的推理问题。比如:

“小明买了一个苹果手机。它的屏幕很大。”

"它"指的是什么?是苹果手机,不是小明,也不是水果苹果,而是指iPhone手机。模型需要参数来追踪这种指代关系。

  1. 隐含的常识

"他把玻璃杯掉在地上,碎了。"

什么碎了?是玻璃杯,不是地板。这需要常识:玻璃杯易碎,地板不易碎。模型需要参数来存储这些常识。

  1. 语用学

"你能把窗户关上吗?"

这表面上是一个疑问句,实际上是一个请求,甚至隐含着不耐烦的情绪。模型需要参数来理解这些语用规则,甚至需要结合上下文,能推测出是否有不耐烦的情绪。

这还只是最表面的复杂性。

语言的世界里,近义词之间有微妙的差异,同一个词在不同语境下意思完全不同。还有成语俗语背后的文化典故,医学、法律这些专业领域的术语……更别说人说话时的那种感觉,褒义贬义、正式口语,模型都得学会分辨。

每一个维度,都需要大量参数来捕捉。

有人做过一个粗略的估算:人类语言中有数十万个词汇,数百万种常见的词语搭配,数千万个事实性知识,数亿种可能的句子结构……要让模型"理解"这一切,1750亿个参数,可能还不够。

1.5 可以解方程吗?

既然ChatGPT是一个函数,有1750亿个参数需要确定,那为什么不能像我们在学校学的那样,用解方程组的方法来求解这些参数呢?

这是一个极好的问题。让我详细解释为什么不能。

为什么不能解方程组?

先回顾一下中学的解方程组是怎么做的:

假设我们有一个函数:y=ax+by = ax + b。我们的目标是求出参数 aa 和 bb:

第1步:根据已知条件列方程

已知条件:

可以列出方程组:

{5=a⋅1+b7=a⋅2+b\begin{cases} 5 = a \cdot 1 + b \ 7 = a \cdot 2 + b \end{cases}

第2步:直接求解

用消元法,直接算出:a=2a = 2,b=3b = 3

完成!我们找到了精确的参数值。那么,能用同样的方法求ChatGPT的参数吗?不太实际。有以下几个问题。

  1. 问题一,方程太复杂

中学的方程组是线性的:2x+3y=102x + 3y = 10

但ChatGPT的"方程"是96层嵌套的非线性系统:

输出=第96层(...第2层(第1层(输入)))\text{输出} = \text{第96层}(...\text{第2层}(\text{第1层}(\text{输入})))

其中每一层都有数十亿个参数,且包含ReLU这样的非线性转换。这是一个极度复杂的非线性系统,没有解析解(就是没有公式可以直接算出答案)。

Note

术语说明:什么是线性和非线性?

线性:输入和输出成正比关系。比如买水果:

非线性:输入和输出的关系有转折。比如:

那为什么ChatGPT需要非线性?

因为语言规律不是简单的正比关系。比如"喜欢"这个词:

同一个词,不同语境意思完全不同。这种复杂关系必须用非线性函数来表达。

  1. 问题二,计算量无法承受

即使理论上能列出方程组,求解1750亿个未知数的方程组:

传统方法(如高斯消元法)的计算复杂度是 O(n3)O(n^3)。对于1750亿,就是 (1750亿)3(1750\text{亿})^3 的计算量。这个数字大到宇宙中的原子数都不够用来计数

1.6 ■ 学点英语

中文 English 音标 说明
函数 Function /ˈfʌŋkʃən/ 输入到输出的映射关系
参数 Parameter /pəˈræmɪtər/ 模型中可学习的权重和偏置
大模型 Large Language Model (LLM) /lɑːdʒ ˈlæŋɡwɪdʒ ˈmɒdl/ 基于海量数据训练的神经网络语言模型
线性 Linear /ˈlɪniər/ 输入输出成正比,可加可乘的简单关系
非线性 Nonlinear /nɒnˈlɪniər/ 输入输出有转折和拐弯的复杂关系
一词多义 Polysemy /pəˈlɪsəmi/ 同一词语在不同语境中含义不同
指代消解 Anaphora Resolution /əˈnæfərə ˌrezəˈluːʃən/ 判断代词(他/它/这个)具体指代什么
语用学 Pragmatics /præɡˈmætɪks/ 研究语境如何影响语言的理解和使用
分布式编码 Distributed Representation /dɪˈstrɪbjuːtɪd ˌreprɪzenˈteɪʃən/ 知识分散在一组参数组合中而非一对一存储
解析解 Closed-form Solution /kləʊzd fɔːm səˈluːʃən/ 可以直接用公式算出的精确数学解
非线性系统 Nonlinear System /nɒnˈlɪniər ˈsɪstəm/ 输出与输入不成正比的复杂系统
激活函数 Activation Function /ˌæktɪˈveɪʃən ˈfʌŋkʃən/ 引入非线性的关键数学操作,如ReLU

1.7 ■ 思考帧

来自: 学习中心|逻辑帧 Logic Frame

vibe-spec-coding,用自然语言来编程 训练的本质
本节目录